/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterfazUsuario;

import Controlador.CTRL_Documento;
import Controlador.CTRL_Kardex;
import Modelo.ENT_Kardex;
import Modelo.ENT_TablaMov;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Isaac Paliza <anndysaac@hotmail.com>
 */
public class GestionarKardex extends HttpServlet {

    String url = "/Vista/AdmDeFerias/GestionarKardex/MovimientosKardex.jsp";
    String idFeria = Usuario.instancia.get(0).getIdFeria();

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     * @throws java.sql.SQLException
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        String bEvaluarTipoMov = request.getParameter("evaluarTipoMov");
        if (bEvaluarTipoMov != null) {
            if (EvaluarTipoMov(request, response) == false) {
            }
        }

        String bGuardarCompra = request.getParameter("GuardarCompra");
        if (bGuardarCompra != null) {
            if (GuardarCompra(request, response) == false) {
            }
        }
        String bReguistrarCompra = request.getParameter("ReguistrarCompra");
        if (bReguistrarCompra != null) {
            if (ReguistrarCompra(request, response) == false) {
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(GestionarKardex.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(GestionarKardex.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    ArrayList<ENT_TablaMov> DatosCompra = new ArrayList();

    private boolean GuardarCompra(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        String nombrecomprador = request.getParameter("nombrecomprador");

        String idLibro = request.getParameter("idLibro");
        String cantidad = request.getParameter("cantidad");

//        int id = Integer.parseInt(idLibro);
        
        
        
        int ii= CTRL_Kardex.buscarIndex(Sistema.datosKardex, idLibro);
        String u = " ";
        ArrayList<ENT_Kardex> DatoKardex = (ArrayList<ENT_Kardex>) Sistema.datosKardex;

        DatosCompra.add(new ENT_TablaMov(DatoKardex.get(ii).getIdLibro(),
                cantidad,
                DatoKardex.get(ii).getNombre(),
                DatoKardex.get(ii).getPrecioT(),
                (Integer.parseInt(cantidad) * Integer.parseInt(DatoKardex.get(ii).getPrecioT()))));

        
        
        
        
        
        
        
        
        
        
        
        
        request.setAttribute("CargarKardexCabezera", Sistema.datosFeria);
        request.setAttribute("CargarKardex", Sistema.datosKardex);
        request.setAttribute("DatosDeCompra", DatosCompra);
        request.setAttribute("nombrecomprador", nombrecomprador);
        redireccionar(request, response);
        return true;
    }

    private boolean ReguistrarCompra(HttpServletRequest request, HttpServletResponse response) throws SQLException {
//        int idTablaMov = (Controlador.Sistema.GenerarIDTabla("idtablamov FROM t_tablamov") + 1);

        String idTipoMovimiento = request.getParameter("idTipoMovimiento");
        String nombrecomprador = request.getParameter("nombrecomprador");
        String idKardex = CTRL_Kardex.idKardex(idFeria, CTRL_Kardex.getFechaBD(idFeria));
        int idDocumento = (Controlador.Sistema.GenerarIDTabla("idTablaMov FROM t_tablamov") + 1);
        CTRL_Documento.AgregarNuevoDocumento(idDocumento, idTipoMovimiento, nombrecomprador);
        
        
        
        String c = "";
        ArrayList<ENT_TablaMov> DatoKardex = DatosCompra;
        for (int i = 0; i < DatosCompra.size(); i++) {
            c = CTRL_Kardex.AgregarMovimientoSalida(
                    (Controlador.Sistema.GenerarIDTabla("idTablaMov FROM t_tablamov") + i),
                    idDocumento,
                    "2",
                    idKardex,
                    DatoKardex.get(i).getIdLibro(),
                    DatoKardex.get(i).getCantidad(),
                    DatoKardex.get(i).getPrecioTotal());

        }
        request.setAttribute("CargarKardexCabezera", Sistema.datosFeria);
        request.setAttribute("CargarKardex", Sistema.datosKardex);
        request.setAttribute("DatosDeCompra", DatosCompra);
        request.setAttribute("Mensaje", c);
        
        redireccionar(request, response);

//        DatoKardex.clear();
        return true;
    }

    private boolean EvaluarTipoMov(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        int idTipoMovimiento = Integer.parseInt(request.getParameter("idTipoMovimiento"));
        if (idTipoMovimiento == 0) {
            request.setAttribute("Mensaje", "Seleccione una opcion");
            redireccionar(request, response);
            return false;
        }
        if (idTipoMovimiento == 1) {
            url = "/Vista/AdmDeFerias/GestionarKardex/MovimientoSalida.jsp";
            request.setAttribute("CargarKardexCabezera", Sistema.datosFeria);
            request.setAttribute("CargarKardex",  CTRL_Kardex.CargarLibro(idFeria, "2014-04-28"));
            redireccionar(request, response);
            return true;
        }
        if (idTipoMovimiento == 2) {
            url = "/Vista/AdmDeFerias/GestionarKardex/MovimientosEntrada.jsp";
            redireccionar(request, response);
            return true;
        }
        return true;
    }

    private void redireccionar(HttpServletRequest request, HttpServletResponse response) {
        ServletContext context = this.getServletContext();
        RequestDispatcher view = context.getRequestDispatcher(url);
        try {
            view.forward(request, response);
        } catch (ServletException ex) {
        } catch (IOException ex) {
        }
    }
}
